home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_56 / refresh.inc < prev    next >
Text File  |  1995-01-01  |  7KB  |  211 lines

  1. procedure write_Note(b:byte);
  2. const nname:array[0..11] of string[2] = ('C-','C#','D-','D#','E-','F-',
  3.                                          'F#','G-','G#','A-','A#','B-');
  4.   begin
  5.     if b<254 then write(nname[b and $0f],b shr 4)
  6.         else if b=254 then write('^^.') else write('...');
  7.   end;
  8.  
  9. procedure display_row(ordr,row:byte);
  10. const hex:string[16] = '0123456789ABCDEF';
  11. var pA:Parray;
  12.     i,b:byte;
  13.     w:word;
  14.   begin
  15.     w:=PATTERN[ORDER[ordr]];
  16.     if w>=$c000 then
  17.       pA:=ptr(FrameSEG[0],((w shr 8) and $3F)*patlength)
  18.     else
  19.       pA:=ptr(w,0);
  20.     write(row:2,'   ');
  21.     for i:=startchn-1 to startchn+3 do
  22.       begin
  23.         if (i+1-startchn) mod 2 = 0 then begin textbackground(black);textcolor(lightgray) end
  24.         else begin textbackground(white);textcolor(black) end;
  25.         if i<=usedchannels-1 then
  26.           begin
  27.             { write Note : }
  28.             b:=pA^[row*usedchannels*5+i*5];
  29.             write_Note(b);
  30.             { write Instrument : }
  31.             b:=pA^[row*usedchannels*5+i*5+1];
  32.             write(' ',b div 10,b mod 10);
  33.             { write volume : }
  34.             b:=pA^[row*usedchannels*5+i*5+2];
  35.             if b<255 then write(' ',b div 10,b mod 10) else write(' ..');
  36.             { write special command+info: }
  37.             b:=pA^[row*usedchannels*5+i*5+3];
  38.             if b<255 then write(' ',chr(ord('A')+b-1)) else write(' .');
  39.             b:=pA^[row*usedchannels*5+i*5+4];
  40.             write(hex[b div 16+1],hex[b mod 16+1]);
  41.             write(' ');
  42.           end
  43.         else
  44.           write('              ');
  45.       end;
  46.   end;
  47.  
  48. procedure display_currow;
  49.   begin
  50.     display_row(curorder,curline);writeln;
  51.   end;
  52.  
  53. function b2hs(b:byte):string;
  54. const hexs:string='0123456789ABCDEF';
  55.   begin
  56.     b2hs:=hexs[b div 16+1] + hexs[b mod 16+1];
  57.   end;
  58.  
  59. function w2hs(w:word):string;
  60.   begin
  61.     w2hs:=b2hs(w div 256)+b2hs(w mod 256);
  62.   end;
  63.  
  64. function b2ds(b:byte):string;
  65. var s:string;
  66.   begin
  67.     str(b:3,s);
  68.     b2ds:=s;
  69.   end;
  70.  
  71. {$I EFX_NAME.INC}
  72.  
  73. procedure refr_channels;
  74. const types:array[0..4] of string[6] = ('OFF','Left','Right','Adlib1','Adlib2');
  75. var i:byte;
  76.     j:byte;
  77.   begin
  78.     gotoxy(1,8);
  79.     textbackground(blue);textcolor(white);
  80.     i:=0;j:=0;
  81.     while i<usedchannels do
  82.       begin
  83.         if (channel[i].channeltyp<3) and
  84.            ((usedchannels<17) or (channel[i].channeltyp>0)) then
  85.             { display only sample channels }
  86.           begin
  87.             inc(j);
  88.             write(' Chn ',(i+1):2,' (',types[channel[i].channeltyp]:5,') ');
  89.             if channel[i].enabled then write('*') else write(' ');
  90.             if channel[i].sloopflag then write('!') else write(' ');
  91.             if channel[i].continueEf then write('c') else write(' ');
  92.             write('(',channel[i].InstrNo:2,') ');
  93.             write('[');
  94.             if channel[i].enabled then
  95.               begin
  96.                 write_note(channel[i].Note);
  97.                 { Arpeggio test : }
  98.                 {write(',');write_note(channel[i].Note1);write(',');write_note(channel[i].Note2);}
  99.               end
  100.             else write('...');
  101.             write('] ');
  102.             write('<',channel[i].sPeriod:5,'>');
  103.             write(' ',channel[i].sStep.DD/64/1024:7:4);
  104.             { Arpeggio test : }
  105.             {write(' ',channel[i].Step1.DD/64/1024:7:4);
  106.             write(' ',channel[i].Step2.DD/64/1024:7:4);}
  107.             write(' ',channel[i].SampleVol:2);
  108.             if channel[i].command<=44 then
  109.             write(' ',get_effectname(i,channel[i].command div 2,channel[i].cmd2nd div 2,channel[i].parameter));clreol;
  110.             write(#13#10);
  111.           end;
  112.         inc(i);
  113.       end;
  114.     if j=0 then writeln(' No digital channels to mix ...     :( ');
  115.   end;
  116.  
  117. var lastrow:byte;
  118.  
  119. procedure refr_patterns;
  120. var i,j:byte;
  121.     w:word;
  122.   begin
  123.     window(1,9,80,25);textbackground(white);textcolor(black);
  124.     if curline+1<lastrow then
  125.       begin
  126.         j:=prevorder(curorder);
  127.         for i:=lastrow to 63 do
  128.           begin
  129.             gotoxy(1,17);writeln;gotoxy(1,17);display_row(j,i);
  130.           end;
  131.         lastrow:=0;
  132.         { new pattern }
  133.         w:=pattern[curpattern];
  134.         if w>=$c000 then { switch EMSpage 0 to curpattern }
  135.           asm
  136.             mov         ax,w
  137.             xor         bx,bx
  138.             mov         ah,44h
  139.             mov         bl,al
  140.             xor         al,al
  141.             mov         dx,[patEMShandle]
  142.             int         67h
  143.           end;
  144.       end;
  145.     for i:=lastrow to curline do
  146.       begin
  147.         gotoxy(1,17);writeln;gotoxy(1,17);display_row(curorder,i);
  148.       end;
  149.     lastrow:=curline+1;
  150.     window(1,1,80,25);
  151.   end;
  152.  
  153. var chnlastinst:array[0..max_channels-1] of byte;
  154.  
  155. procedure refr_inst;
  156. var i:byte;
  157.     n:byte;
  158.   procedure write_no(j:word);
  159.     begin
  160.       gotoxy((j div 15)*11+1,j mod 15+1);
  161.       write(j+1:2);
  162.     end;
  163.   begin
  164.     textbackground(blue);textcolor(white);
  165.     if useEMS then window(1,11,80,25) else window(1,10,80,25);
  166.     for i:=0 to usedchannels-1 do
  167.       begin
  168.         n:=ord(channel[i].enabled)* channel[i].InstrNo*ord(channel[i].channeltyp>0);
  169.         if (chnlastinst[i]<>n) and (chnlastinst[i]>0) then
  170.           begin textcolor(white);textbackground(blue);write_no(chnlastinst[i]-1) end;
  171.         chnlastinst[i]:=n;if n<>0 then begin textcolor(blue);textbackground(white);write_no(n-1) end;
  172.       end;
  173.     window(1,1,80,25);
  174.   end;
  175.  
  176. var samplepage:byte;
  177.     wassmp_scr:boolean;
  178.  
  179. procedure refr_sample;
  180. var i,n:byte;
  181.   begin
  182.     for i:=0 to usedchannels-1 do
  183.       begin
  184.         n:=ord(channel[i].enabled)* channel[i].InstrNo*ord(channel[i].channeltyp>0);
  185.         if (chnlastinst[i]<>n) and (chnlastinst[i]>0) and
  186.            (samplepage*18<chnlastinst[i]) and (samplepage*18+19>chnlastinst[i]) then
  187.           begin
  188.             textcolor(white);textbackground(blue);
  189.             gotoxy(1,7+chnlastinst[i]-samplepage*18);
  190.             write(chnlastinst[i]:3,'.');
  191.           end;
  192.         chnlastinst[i]:=n;
  193.         if (n<>0) and (samplepage*18<n) and (samplepage*18+19>n) then
  194.           begin
  195.             textcolor(blue);textbackground(white);
  196.             gotoxy(1,7+chnlastinst[i]-samplepage*18);
  197.             write(n:3,'.');
  198.           end;
  199.       end;
  200.   end;
  201.  
  202. procedure refresh_scr;
  203.   begin
  204.     case screen_no of
  205.       0: { Helpscreen (do not refrsh) };
  206.       1: { channel view }     refr_channels;
  207.       2: { pattern view }     refr_patterns;
  208.       3: { Instrument infos } refr_inst;
  209.       4: { sample infos }     refr_sample;
  210.     end;
  211.   end;